function mnusu() {
	$('#content').load("html/manterusuarios.html #pnlMntrUsuarios", function() {

		montarGridUsuarios();
		montarArvoreGrupos();
		montarArvorePermissoes();

		$('#btnSalvarPermissoes').click(function(e) {
			e.preventDefault();
			salvarNovoGrupo();
		});

		$('#tabs').tabs({
			activate: function(event, ui) {
				if ($(ui.newTab).find('a').html() == "Permissões de Acesso") {
					$('#lstUsuarios').empty();
					var usuarios = $('#grdDataset').jtable('selectedRows');
					if (usuarios.length > 0) {
						usuarios.each(function () {
						    var record = $(this).data('record');
						    var a = $('<a>').attr({
						    	href: "#",
						    	title: "Clique para importar as permissões desse usuário",
						    	class: "item_menu"
						    });
						    $(a).append(record.usuario);
						    $(a).click(function (e) {
						    	e.preventDefault();
						    	importarPermissoesUsuario(record.id);
						    });
						    $('#lstUsuarios').append(a).append($('<br>'));
						}); 
					    $('#btnSalvarPermissoes').removeAttr("disabled");
					} else {
					    $('#lstUsuarios').append('<label>').append('Nenhum usuário selecionado');
					    $('#btnSalvarPermissoes').attr("disabled", "disabled");
					}
				}
			}
		});
		
		$('#tabUsuarios').tabs();
		$('#tabRecursos').tabs();
		$('#tabGrupos').tabs();
		$('#pnlControles').tabs();
	});
}

function importarPermissoesUsuario(usuario) {
	var params = [{
					nome: "action",
					valor: "acesso.consultarPermissoesUsuario"
				},
				{
					nome: "usuario",
					valor: usuario
				}];
	
	exec(params, function(dados) {
		var tree = $.fn.zTree.getZTreeObj("arvRecursos");
		tree.checkAllNodes(false);
		tree.cancelSelectedNode();
		for (var x in dados.Records) {
			var node = tree.getNodeByParam("id", dados.Records[x].recursoid);
			if (node != null && !node.checked && dados.Records[x].acesso) {
				tree.checkNode(node, true, false);
			}
		}
	});
}

function salvarNovoGrupo() {
	var usuarios = $('#grdDataset').jtable('selectedRows');
	if (usuarios.length > 0) {
		var pUsuarios = "";
		var pRecursos = "";
		var treeObj = $.fn.zTree.getZTreeObj("arvRecursos");
		var recursos = treeObj.getCheckedNodes(true);
		treeObj.expandAll(false);
		
		usuarios.each(function () {
			if (pUsuarios.length > 0) {
				pUsuarios = pUsuarios + ",";
			}
		    var record = $(this).data('record');
			pUsuarios = pUsuarios + record.id;
		}); 

		for (var x in recursos) {
			if (pRecursos.length > 0) {
				pRecursos = pRecursos + ",";
			}
			pRecursos = pRecursos + recursos[x].id;
		}
		
		params = [{
			nome: "action",
			valor: "grupousuarios.inserirCustom"
		}, 
		{
			nome: "usuarios",
			valor: pUsuarios
		},
		{
			nome: "grupo",
			valor: $('#novogrupo').val()
		},
		{
			nome: "recursos",
			valor: pRecursos
		}];

		exec(params, function(e) {
			if (e.Result == "OK") {
				montarArvoreGrupos();
				preencherPermissoes(0, true);
			}
			mostrarMensagem(e.Message, (e.Result == "OK") ? "m" : "e");
		});
	} else {
		mostrarMensagem("Não há usuário selecionados!", "e");
	}
}

function montarArvoreGrupos() {
	params = [{
		nome: "action",
		valor: "grupousuarios.consultarArvore"
	}];

	treeCfg = {
		data : {
			key : {
				name : "grupo",
				children : "subs"
			}
		},
		callback: {
			onClick: function (evento, tree, node) {
				var nodes = $.fn.zTree.getZTreeObj(tree).getSelectedNodes();
				preencherPermissoes(node.id, nodes.length == 1);
			}
		}
	};

	montarArvore($("#arvGrupos"), params, treeCfg);
}

function montarGridUsuarios() {
	var pCampos = {
    	id: {key: true,
	   		 create: false,
	   		 edit: false,
	   		 list: false},
	   	perfis: {title: 'Perfis',
	   			width: '7%',
 		    	sorting: false,
		    	edit: false,
		    	create: false,
		    	display: function(dados) {
		    		var img = $('<img>').attr({src: "css/themes/lightcolor/add.png", title:"Perfis do Usuário"});
		    		$(img).click(function() {
		    			abrirPerfis(img.closest('tr'), dados.record);
		    		});
		    		return img;
			    }
		   	},
	   	usuario: {title: 'Usuário',
	           	  width: '20%'},
	    mail: {title: 'e-mail',
	    		width: '20%',
	    		list: true,
	    		create: true,
	    		edit: true},
	   	senha: {title: 'Senha',
	   			width: '20%',
	   			type: 'password',
        		create: true,
	        	defaultValue: '',
	       		edit: false,
	       		list: false}
		};
	var pChave  = 'Usuario ASC';
	var pClasse = 'usuario';
	var pFiltro = new Array({campo: 'usuario', titulo: 'Usuário', selecionado: true});

	manter(pCampos, pChave, pClasse, pFiltro, $('#pnlUsuarios'));
}

function abrirPerfis(tr, usuario) {
	var pCampos = {
		pk: {
			key: true,
			list: false,
			create: false,
			edit: false
		},
	    grupo: {
	    	title: 'Perfil'
	    }
	};
	
	$('#grdDataset').jtable('openChildTable', 
			tr, 
			{
				title : 'Perfis de ' + usuario.usuario,
			    messages: getJTableMessages(),
				selecting: true,
				actions: {
	                listAction: 'post.php?action=usuario.consultarGrupos&usuario=' + usuario.id,
	                createAction: 'post.php?action=usuario.inserirGrupo&usuario=' + usuario.id,
	                deleteAction: 'post.php?action=usuario.excluirGrupo'
				},
		        fields: pCampos,
		        formCreated: function(event, data) {
		        	$('input[name="grupo"]').autocomplete({
		        		source: function (request, response) {
		        			params = [{
		        							nome: "action",
		        							valor: "usuario.consultarGruposDisponiveis"
		        						},
		        						{
		        							nome: "usuarioid",
		        							valor: usuario.id
		        						},
		        						{
		        							nome: "grupo",
		        							valor: request.term
		        						}];

		        			exec(params, 
		        					function(dados) {
		        						if (dados.Records) {
			        						response($.map(dados.Records, function (item) {
			        							return item.grupo;
			        						}));
		        						}
		        					});
		        		}
		        	});
		        }
		    },
			function (data) {
				data.childTable.jtable('load');
			});
}

function montarArvorePermissoes() {
	params = [{
		nome: "action",
		valor: "recurso.consultarArvore"
	}];

	treeCfg = {
		check : {
			enable : true
		},
		data : {
			key : {
				name : "titulo",
				children : "subs"
			}
		},
		callback: {
			onCheck: function (evento, tree, node) {
				marcarDependencias(tree, "id", node.id);
			}
		}
	};
	
	exec(params, function(dados) {
		$("#arvRecursos").addClass("ztree");
		var tree = $.fn.zTree.init($("#arvRecursos"), treeCfg, dados.Records);
		tree.expandAll(true);
		checarPermissoes(tree);
	});
}

function preencherPermissoes(grupo, limpar) {
	var tree = $.fn.zTree.getZTreeObj("arvRecursos");
	if (limpar) {
		tree.checkAllNodes(false);
	} 

	params = [{
				nome: "action",
				valor: "acesso.consultarArvore"
			},
			{
				nome: "id",
				valor: grupo
			}];

	exec(params, function(dados2) {
		carregarPermissoes(tree, dados2.Records);
	});
}

function carregarPermissoes(tree, regs) {
	if (regs != null) {
		for(var x in regs) {
			node = tree.getNodeByParam("id", regs[x].recursoid);
			if (node != null && !node.chkDisabled) {
				if (regs[x].acesso) {
					tree.checkNode(node, true, false);
					carregarPermissoes(tree, regs[x].recursos);
				}
			}
		}
	}
}

function checarPermissoes(tree) {
	var nodes = tree.transformToArray(tree.getNodes());

	for (var x in nodes) {
		if (nodes[x].selfPerm == 0) {
			tree.setChkDisabled(nodes[x], true, false, true);
		}
	}
}

